#ifndef ESTACIONAMIENTO_H_
#define ESTACIONAMIENTO_H_

#include "PlazaEstacionamiento.h"
#include "concurrencia/LockFile.h"
#include "concurrencia/MemoriaCompartida.h"
#include "Utils.h"
#include "Auto.h"
#include "Administrador.h"
#include <iostream>

using namespace std;

class Estacionamiento {
private:
	MemoriaCompartida<PlazaEstacionamiento> plazasEstacionamiento;
	Administrador* administrador;
	int cantidadLugares;
	LockFile * lockEstacionamiento;
public:
	Estacionamiento(int cantidadLugares, double precioPorHora);
	//Toma la posicion del mapa "pos" y la lockea para su modificacion o lectura.
	void lockPlaza(int pos);
	void unlock(int pos);
    //Toma la posicion del mapa "pos" y modifica su estado a deocupado.
	void desocuparPlaza(int pos);
    //Toma la posicion del mapa "pos" y modifica su estado a ocupado.
	void ocuparPlaza(int pos);
	int getCantidadLugares();
    //Desocupa la posicion en la que estaba "autoSalido".
	void sacarAuto(Auto * autoSalido);
	Administrador getAdministrador();
	//Recorre las plazas de estacionamiento del mapa y devuelve la primera posicion que encuenta desocupada.
	int getPosicionLibre();
	void estaciona(Auto * autoEntrando);
	void liberarMemoria();
	virtual ~Estacionamiento();
};

#endif /* ESTACIONAMIENTO_H_ */
